/*Estudiantes:
 * Fray Salas CI: 17997726
 * Colmenares Karem CI. 19849170
 * Colmenarez yenifer CI.19431263
 * 
 */

package proyectoseccion;

import clases.Estudiante;

import clases.Profesor;
import clases.Seccion;
import java.io.*;
import java.util.Vector;
import pantallas.Pantalla3;


public class Main {

    public static void menuprincipal() throws IOException
    {
    	
    	
    	
        System.out.println("-------------------------------------");
        System.out.println("-----Seleccione el Nro del Menu------");
        System.out.println("-------------------------------------");
        System.out.println("1.- Cargar Seccion: ");
        System.out.println("2.- Inscribir Estudiante: ");
        System.out.println("3.- Retirar Estudiante: ");
        System.out.println("4.- Buscar Estudiante: ");
        System.out.println("5.- Aplicar Evaluacion: ");
        System.out.println("6.- Imprimir Estudiantes por Cedula: ");
        System.out.println("7.- Imprimir Estudiantes Aprobados: ");
        System.out.println("8.- Imprimir Estudiantes Aplazados: ");
        System.out.println("9.- Imprimir Estudiantes por Nota Final: ");
        System.out.println("10.- Imprimir promedio de Notas: ");
        System.out.println("11.- Salir: ");
        
      
        
    }
   
    public static void imprimirPromedio(Seccion sec)
    {
    	System.out.println("==========================================================");
        System.out.println("=========PROMEDIO DE LOS ESTUDIANTES DE LA SECCION========");
        System.out.println("==========================================================");
        System.out.println("El Promedio de la Sección es: "+sec.promedio());
        System.out.println("==========================================================");
    }
    
   public static void aplicarevaluacion(Seccion sec)
   {
	   
   }
   
   public static void Imprimirporcedula(Seccion sec)
   {
	   Vector<Estudiante> aux;
	   aux = sec.ordenarCedula();
	   System.out.println("====LISTADO DE ESTUDIANTES POR CEDULA====");
	   for(int i=0; i<aux.size(); i++)
	   {
		   System.out.println("==========================================");
		   System.out.println("Cedula: "+aux.elementAt(i).getCedula());
		   System.out.println("Nombre: "+aux.elementAt(i).getNombre());
		   System.out.println("Apellido: "+aux.elementAt(i).getApellido());
		   System.out.println("Nota Final: "+aux.elementAt(i).getNotafinal());
		   System.out.println("Condicion: "+aux.elementAt(i).getEvaluado());
	   }
	   
	   FileWriter fichero = null;
	   PrintWriter pw = null;	   
	   try
	   
       {
           fichero = new FileWriter("src/proyectoseccion/Cedula.txt");
           pw = new PrintWriter(fichero);
           for (int i = 0; i < aux.size(); i++)
           {
        	   pw.println("Cedula: "+aux.elementAt(i).getCedula());
        	   pw.println("Nombre: "+aux.elementAt(i).getNombre());
        	   pw.println("Apellido: "+aux.elementAt(i).getApellido());
    		   pw.println("Nota Final: "+aux.elementAt(i).getNotafinal());
    		   pw.println("Condicion: "+aux.elementAt(i).getEvaluado());
           }    

       } catch (Exception e) {
           e.printStackTrace();
       } finally {
          try {
          if (null != fichero)
             fichero.close();
          } catch (Exception e2) {
             e2.printStackTrace();
          }
       }
   }
   
   public static void ImprimirAprobados(Seccion sec)
   {
	   Vector<Estudiante> aux;
	   aux = sec.imprimirAprobados();
	   System.out.println("====LISTADO DE ESTUDIANTES APROBADOS===");
	   for(int i=0; i<aux.size(); i++)
	   {
		   System.out.println("==========================================");
		   System.out.println("Cedula: "+aux.elementAt(i).getCedula());
		   System.out.println("Nombre: "+aux.elementAt(i).getNombre());
		   System.out.println("Apellido: "+aux.elementAt(i).getApellido());
		   System.out.println("Nota Final: "+aux.elementAt(i).getNotafinal());
	   }
	   FileWriter fichero = null;
	   PrintWriter pw = null;	   
	   try
       {
           fichero = new FileWriter("src/proyectoseccion/Aprobados.txt");
           pw = new PrintWriter(fichero);
           for (int i = 0; i < aux.size(); i++)
           {
        	   pw.println("Cedula: "+aux.elementAt(i).getCedula());
        	   pw.println("Nombre: "+aux.elementAt(i).getNombre());
        	   pw.println("Apellido: "+aux.elementAt(i).getApellido());
    		   pw.println("Nota Final: "+aux.elementAt(i).getNotafinal());
           }    

       } catch (Exception e) {
           e.printStackTrace();
       } finally {
          try {
          if (null != fichero)
             fichero.close();
          } catch (Exception e2) {
             e2.printStackTrace();
          }
       }
   }
   
   public static void ImprimirAplazados(Seccion sec)
   {
	   Vector<Estudiante> aux;
	   aux = sec.imprimirAplazados();
	   System.out.println("====LISTADO DE ESTUDIANTES APLAZADOS===");
	   for(int i=0; i<aux.size(); i++)
	   {
		   System.out.println("==========================================");
		   System.out.println("Cedula: "+aux.elementAt(i).getCedula());
		   System.out.println("Nombre: "+aux.elementAt(i).getNombre());
		   System.out.println("Apellido: "+aux.elementAt(i).getApellido());
		   System.out.println("Nota Final: "+aux.elementAt(i).getNotafinal());
	   }
	   
	   FileWriter fichero = null;
	   PrintWriter pw = null;	   
	   try
       {
           fichero = new FileWriter("src/proyectoseccion/Aplazados.txt");
           pw = new PrintWriter(fichero);
           for (int i = 0; i <aux.size(); i++)
           {
        	   pw.println("Cedula: "+aux.elementAt(i).getCedula());
        	   pw.println("Nombre: "+aux.elementAt(i).getNombre());
        	   pw.println("Apellido: "+aux.elementAt(i).getApellido());
    		   pw.println("Nota Final: "+aux.elementAt(i).getNotafinal());
           }    

       } catch (Exception e) {
           e.printStackTrace();
       } finally {
          try {
          if (null != fichero)
             fichero.close();
          } catch (Exception e2) {
             e2.printStackTrace();
          }
       }
   }
   
   public static void Imprimirpornotas(Seccion sec)
   {
	   Vector<Estudiante> aux;
	   aux = sec.ordenarNota();
	   System.out.println("====LISTADO DE ESTUDIANTES POR NOTA FINAL====");
	   for(int i=0; i<aux.size(); i++)
	   {
		   System.out.println("==========================================");
		   System.out.println("Nota Final: "+aux.elementAt(i).getNotafinal());
		   System.out.println("Cedula: "+aux.elementAt(i).getCedula());
		   System.out.println("Nombre: "+aux.elementAt(i).getNombre());
		   System.out.println("Apellido: "+aux.elementAt(i).getApellido());
		   System.out.println("Condicion: "+aux.elementAt(i).getEvaluado());
	   }
	   
	   FileWriter fichero = null;
	   PrintWriter pw = null;	   
	   try
       {
           fichero = new FileWriter("src/proyectoseccion/NotaFinal.txt");
           pw = new PrintWriter(fichero);
           for (int i = 0; i <aux.size(); i++)
           {
        	   pw.println("Cedula: "+aux.elementAt(i).getCedula());
        	   pw.println("Nombre: "+aux.elementAt(i).getNombre());
        	   pw.println("Apellido: "+aux.elementAt(i).getApellido());
    		   pw.println("Nota Final: "+aux.elementAt(i).getNotafinal());
    		   pw.println("Condicion: "+aux.elementAt(i).getEvaluado());
           }    

       } catch (Exception e) {
           e.printStackTrace();
       } finally {
          try {
          if (null != fichero)
             fichero.close();
          } catch (Exception e2) {
             e2.printStackTrace();
          }
       }
   }
    
    public static void menubuscar(Seccion sec) throws NumberFormatException, IOException
    {
    	Estudiante aux= null;
    	BufferedReader lector = new BufferedReader (new InputStreamReader(System.in));
		long cedula;
    	System.out.println("------------------------------------");
        System.out.println("-----=====MENU DE BUSQUEDA=====-----");
        System.out.println("------------------------------------");
        System.out.println("Ingrese el Nro de Cedula: ");
      
        while(true){
        	try {
        		cedula = Long.parseLong(lector.readLine());
                aux = sec.buscarEstudiante(cedula);
                break;
        	} catch (NumberFormatException e) {
        		System.out.println("Ingrese el Nro de Cedula: ");
			}
        }
        
        
        if(aux != null)
        {
        	System.out.println("Apellido: "+aux.getApellido());
    		System.out.println("Nombre: "+aux.getNombre());
    		System.out.println("Cedula: "+aux.getCedula());
        }
        else
        {
        	System.out.println("El Estudiante no existe");
        }
    }
    
    public static void menuretirarestudiante (Seccion sec) throws NumberFormatException, IOException
    {
    	Estudiante aux= null;
    	int resp=2;
    	
    	long cedula;
    	BufferedReader lector = new BufferedReader (new InputStreamReader(System.in));
    	System.out.println("Ingrese el Nro de Cedula: ");
        
          while(true){
          	try {
          		cedula = Long.parseLong(lector.readLine());
          		aux=sec.buscarEstudiante(cedula);
                break;
          	} catch (NumberFormatException e) {
          		System.out.println("Ingrese el Nro de Cedula: ");
  			}
          }
          
          if(aux != null) 
          {
        	System.out.println("¡Desea Retirar al Estudiante "+aux.getApellido()+" "+aux.getNombre()+" de la Sección?");
      		System.out.println("1.Si 2.No");
      	    resp = Integer.parseInt(lector.readLine()); 
      	    if (resp == 1)
      	    {
      	    	sec.eliminarEstudiante(cedula);
      	    	if (sec.getNumestudiantes()== 0){
      	    		sec.setNumseccion(-1);
      	    		System.out.println("La Seccion ha sido eliminada");
      	    		System.exit(0);
      	    		
      	    	}
      	    	
      	    }
      	     return;
          }
          else
          {
          	System.out.println("El Estudiante no existe");
          }
          
          
          
    	
    }
    
    
    public static boolean esPalabraCaracteres(String palabra)
    {
    	for (int i=0; i<palabra.length();i++)
    	{
    		if (!((palabra.charAt(i) > 64 && palabra.charAt(i) <91) || (palabra.charAt(i) > 96 && palabra.charAt(i) < 123)))
    			return false;
    	}
    	        return true;
    }
    
    
    
    public static void menuprofesor(Profesor prof) throws IOException
    {
 
    	
        long ced;
        String nom, ape, tit = null;
        int numero;
        String n;
        BufferedReader lector = new BufferedReader (new InputStreamReader(System.in));
        System.out.println("==================================================");
        System.out.println("==================MENU DEL PROFESOR===============");
        System.out.println("==================================================");
        boolean c = true;
        do{
        System.out.println("Ingrese el nombre del profesor: ");
        nom = lector.readLine();
        if(esPalabraCaracteres(nom))
        {
        	c = false;
        }
        else 
        {
        	System.out.println("Admite solo caracteres de la A-Z ó a-z");
        	c= true;
        }
        }while (c == true);
        prof.setNombre(nom);
        boolean d = true;
        do{
        System.out.println("Ingrese el Apellido del profesor: ");
        ape = lector.readLine();
        if(esPalabraCaracteres(ape))
        {
        	d = false;
        }
        else 
        {
        	System.out.println("Admite solo caracteres de la A-Z ó a-z");
        	d= true;
        }
        }while (d == true);
        prof.setApellido(ape);
        System.out.println("Ingrese la cedula del profesor: ");
        
        while(true){
        	try {
        		ced = Long.parseLong(lector.readLine());
                prof.setCedula(ced);
                break;
        	} catch (NumberFormatException e) {
				System.out.println("Ingrese la Cedula del profesor: ");
			}
        }
        
        boolean resp = true;
        do
        {
        	while(true){
        		System.out.println("Seleccione el titulo del profesor: ");
                System.out.println("1. Ingeniero Informatica, 2. Licenciado en matematica, 3. Analista de sistema");
                
            	try {

                	n = lector.readLine();
                    numero = Integer.parseInt(n);
                    break;
            	} catch (NumberFormatException e) {
            		System.out.println("Seleccione el titulo del profesor: ");
                    System.out.println("1. Ingeniero Informatica, 2. Licenciado en matematica, 3. Analista de sistema");
                    }
            }
        	
        	
        	
        	
        	if (numero == 1)
        	{
        		tit = "Ingeniero Informatica";
        		prof.setTitulo(tit);
        		resp = true;
        		
        	}
        	else if (numero == 2)
        	{
        		tit = "Licenciado en matematica";
        		prof.setTitulo(tit);
        		resp = true;
        	}
        	else if (numero == 3)
        	{
        		tit = "Analista de sistema";
        		prof.setTitulo(tit);
        		resp = true;
        	}
        	else
        	{
        		System.out.println("El valor ingresado es invalido");
        		prof.setTitulo(tit);
        		resp = false;
        	}
        }
        while(resp == false);
        
        System.out.println("Profesor Cargado...");
        prof.setTitulo(tit);
        System.out.println(tit);
        
        
        
    }
    
    public static void menuestudiante(Seccion sec) throws  IOException
    {
    	long ced;
        String nom, ape;
       
        Estudiante est = new Estudiante();
        
        BufferedReader lector = new BufferedReader (new InputStreamReader(System.in));
        System.out.println("==================================================");
        System.out.println("=================MENU DEL ESTUDIANTE==============");
        System.out.println("==================================================");
        
        
        while(true){
        	System.out.println("Ingrese la Cedula del estudiante: ");
        	try {
        		 ced = Long.parseLong(lector.readLine());
        		 
        		 if(sec.buscarEstudiante(ced)==null)
        			 
        			 if(!sec.compararCedulaProfesor(ced)){
        				 est.setCedula(ced);
        				 break;
        			 }
        			 else
        				 System.out.println("La cedula ingresada corresponde a la del profesor");
        		 else
    				 System.out.println("La cedula ingresada corresponde a un estudiante inscrito");
        	} catch (NumberFormatException e) {
				System.out.println("Ingrese la Cedula del estudiante: ");
			}
        }  
        boolean a= true;
        do{
            System.out.println("Ingrese el Nombre del Estudiante: ");
            nom = lector.readLine();
            if(esPalabraCaracteres(nom))
            {
            	a = false;
            }
            else 
            {
            	System.out.println("Admite solo caracteres de la A-Z ó a-z");
            	a= true;
            }
            }while (a == true);
        est.setNombre(nom);
        boolean b=true;
        do{
            System.out.println("Ingrese el Apellido del Estudiante: ");
            ape = lector.readLine();
            if(esPalabraCaracteres(ape))
            {
            	b = false;
            }
            else 
            {
            	System.out.println("Admite solo caracteres de la A-Z ó a-z");
            	b= true;
            }
            }while (b == true);
        est.setApellido(ape);
        est.setNotafinal(0);
        est.setCondicion('2');
        
        sec.inscribirEstudiante(est);
        
        
    }
    
    public static void menuseccion(Profesor prof, Seccion sec) throws IOException 
    {
        int nro;
        String aux;
        

        
        BufferedReader lector = new BufferedReader (new InputStreamReader(System.in));
        System.out.println("-------------------------------------");
        System.out.println("----------MENU DE LA SECCION---------");
        System.out.println("-------------------------------------");
        
       
      
        while(true){
        	System.out.println("Ingrese el Numero de la Seccion: ");
        	try {
        		aux = lector.readLine();
                nro = Integer.parseInt(aux);               
                if(nro>0){
                	sec.setNumseccion(nro);
                	break;
                }
        	} catch (NumberFormatException e) {
				System.out.println("Ingrese el Numero de la Seccion: ");
			}
        }
        
        
       
        menuprofesor(prof);
        sec.setProf(prof);
       
       String resp = "";
       do
        {
            menuestudiante(sec);
         
        System.out.println("Desea Inscribir otro estudiante, 1.Si 2.No ");
        resp=lector.readLine();
        }while(!resp.equals("2"));
    }

    /**
     * @param args the command line arguments
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException
    {
        new Pantalla3().setVisible(true);
    	/*boolean seccion=false,evaluacion=false,inscribio=false;
    	BufferedReader lector = new BufferedReader (new InputStreamReader(System.in));
    	
    	
    	Profesor prof = new Profesor();

        Seccion sec = new Seccion();
        sec.setNumseccion(-1);
        int resp;
        String r;
		do
        {
    		
            while(true){
            	     menuprincipal();
            	try {
            		r = lector.readLine();
            		resp = Integer.parseInt(r); 
                    break;
            	} catch (NumberFormatException e) {
    				System.out.println("Ingrese una opcion del menú: ");
    			}
            }
    		
    		if (resp == 1 )
        	{
        		
    			
    			if(!seccion){ 
    			    seccion=true;
    				inscribio=true;
    				menuseccion(prof, sec);
    				System.out.println("Seccion Cargada...");
    			}
    			else
    				System.out.println("La Seccion ha sido Cargada");
    		}
        	else if (resp == 2)
        	{
        		if ((sec.getNumseccion() != -1))
        		{
        		
        			
        			inscribio=true;
        			menuestudiante(sec);
        			System.out.println("El estudiante ha sido inscrito");
        		}
        		else
        		{
        			System.out.println("Debe cargar la seccion");
        		}
        	}
        	else if (resp == 3)
        	{
        		if (sec.getNumseccion() != -1)
        		{
        			
        			if(inscribio){
        	//		Runtime.getRuntime().exec("command cls");
        				menuretirarestudiante(sec);
        				if(sec.getEstudiantes().isEmpty())
        					inscribio=false;
        			}
        			else
        				System.out.println("No hay estudiantes inscritos");
        		}
        		else
        		{
        			System.out.println("Debe cargar la seccion");
        		}
        	}
        	else if (resp == 4)
        	{
        		if (sec.getNumseccion() != -1)
        		{
        			if(inscribio){
        				//		Runtime.getRuntime().exec("command cls");
        				menubuscar(sec);
        	        }
        			else
        				System.out.println("No hay estudiantes inscritos");

        		}
        		else
        		{
        			System.out.println("Debe cargar la seccion");
        		}
        	}
        	else if (resp == 5)
        	{
        		if (sec.getNumseccion() != -1)
        		{
        			if(inscribio){
        				//		Runtime.getRuntime().exec("command cls");
        				aplicarevaluacion(sec);
        				evaluacion=true;
        	        }
        			else
        				System.out.println("No hay estudiantes inscritos");
        			
        		
        		}
        		else
        		{
        			System.out.println("Debe cargar la seccion");
        		}
        	}
        	else if (resp == 6)
        	{
        		if (sec.getNumseccion() != -1)
        		{
        			if(inscribio){
        					Imprimirporcedula(sec);
        				}
        			else
        				System.out.println("No hay estudiantes inscritos");        	
        		}
        		else
        		{
        			System.out.println("Debe cargar la seccion");
        		}
        	}
        	else if (resp == 7)
        	{
        		if (sec.getNumseccion() != -1)
        		{
        			if(inscribio)
        				if(evaluacion){
        					ImprimirAprobados(sec);
        				}
        				else
        					System.out.println("Debe aplicar las evaluaciones");
        			else
        				System.out.println("No hay estudiantes inscritos");        	
        		}
        		else
        		{
        			System.out.println("Debe cargar la seccion");
        		}
        		
        	}
        	else if (resp == 8)
        	{
        		if (sec.getNumseccion() != -1)
        		{
        			if(inscribio)
        				if(evaluacion){
        					ImprimirAplazados(sec);
        				}
        				else
        					System.out.println("Debe aplicar las evaluaciones");
        			else
        				System.out.println("No hay estudiantes inscritos");        	
        		}
        		else
        		{
        			System.out.println("Debe cargar la seccion");
        		}
        	}
        	else if (resp == 9)
        	{
        		if (sec.getNumseccion() != -1)
        		{
        			if(inscribio)
        				if(evaluacion){
        					Imprimirpornotas(sec);
        				}
        				else
        					System.out.println("Debe aplicar las evaluaciones");
        			else
        				System.out.println("No hay estudiantes inscritos");        	
        		}
        		else
        		{
        			System.out.println("Debe cargar la seccion");
        		}
        	}
        	else if (resp == 10)
        	{
        		if (sec.getNumseccion() != -1)
        		{
        			if(inscribio)
        				if(evaluacion){
        					imprimirPromedio(sec);
        				}
        				else
        					System.out.println("Debe aplicar las evaluaciones");
        			else
        				System.out.println("No hay estudiantes inscritos");        	
        		}
        		else
        		{
        			System.out.println("Debe cargar la seccion");
        		}
        	}
        	else if (resp == 11)
        	{
        		resp = 13;	
        	}
    		
        resp=-1;
        }
        while(resp != 12);
    	System.exit(0);
    	        // TODO code application logic here*/
    }

}
